export default class CustomPalette {
  constructor(bpmnFactory, create, elementFactory, palette, translate, lassoTool, handTool, globalConnect) {
    this.bpmnFactory = bpmnFactory;
    this.create = create;
    this.elementFactory = elementFactory;
    this.translate = translate;
    this.lassoTool = lassoTool;
    this.handTool = handTool;
    this.globalConnect = globalConnect;

    palette.registerProvider(this);
  }

  getPaletteEntries(/*element*/) {
    const {
      bpmnFactory,
      create,
      elementFactory,
      lassoTool,
      // handTool,
      globalConnect
    } = this;
    
    function createBusinessObject(busName, name, height) {
      return function(event) {
        const businessObject = bpmnFactory.create('bpmn:' + busName, {name: name});
        businessObject['custom'] = 1
        const shape = elementFactory.createShape({
          type: 'bpmn:' + busName,
          businessObject
        });
        if (height) {
          shape.height = height;
        }
        create.start(event, shape);
      }
    }
    
    return {
      /*'create.custom-hand-tool': {
        group: 'tools', // 分组名
        className: 'bpmn-icon-hand-tool', // 样式类名
        title: '全体移动',
        action: { // 操作
          click: function(event) {
            handTool.activateHand(event);
          }
        }
      },*/
      'create.custom-lasso-tool': {
        group: 'tools', // 分组名
        className: 'bpmn-icon-lasso-tool', // 样式类名
        title: '套索移动',
        action: { // 操作
          click: function(event) {
            lassoTool.activateSelection(event);
          }
        }
      },
      'create.custom-connection-tool': {
        group: 'tools', // 分组名
        className: 'bpmn-icon-connection-multi', // 样式类名
        title: '关联连线',
        action: { // 操作
          click: function(event) {
            globalConnect.toggle(event);
          }
        }
      },
      'tool-separator': {
        group: 'tools',
        separator: true
      },
      'create.custom-start-event': {
        group: 'model', // 分组名
        className: 'bpmn-icon-start-event-none', // 样式类名
        title: '创建开始节点',
        action: { // 操作
          dragstart: createBusinessObject('StartEvent', '开始节点'), // 开始拖拽时调用的事件
          click: createBusinessObject('StartEvent', '开始节点') // 点击时调用的事件
        }
      },
      'create.custom-end-event': {
        group: 'model', // 分组名
        className: 'bpmn-icon-end-event-none', // 样式类名
        title: '创建结束节点',
        action: { // 操作
          dragstart: createBusinessObject('EndEvent', '结束节点'), // 开始拖拽时调用的事件
          click: createBusinessObject('EndEvent', '结束节点') // 点击时调用的事件
        }
      },
      'create.custom-user-task': {
        group: 'model', // 分组名
        className: 'bpmn-icon-task', // 样式类名
        title: '创建人工节点',
        action: { // 操作
          dragstart: createBusinessObject('Task', '', 50), // 开始拖拽时调用的事件
          click: createBusinessObject('Task', '', 50) // 点击时调用的事件
        }
      },
      'create.custom-send-task': {
        group: 'model', // 分组名
        className: 'bpmn-icon-send-task', // 样式类名
        title: '创建抄送节点',
        action: { // 操作
          dragstart: createBusinessObject('SendTask', '', 50), // 开始拖拽时调用的事件
          click: createBusinessObject('SendTask', '', 50) // 点击时调用的事件
        }
      },
      'create.custom-script-task': {
        group: 'model', // 分组名
        className: 'bpmn-icon-script-task', // 样式类名
        title: '创建脚本节点',
        action: { // 操作
          dragstart: createBusinessObject('ScriptTask', '', 50), // 开始拖拽时调用的事件
          click: createBusinessObject('ScriptTask', '', 50) // 点击时调用的事件
        }
      },
      'create.custom-exclusive-gateway': {
        group: 'model', // 分组名
        className: 'bpmn-icon-gateway-xor', // 样式类名
        title: '创建分支节点',
        action: { // 操作
          dragstart: createBusinessObject('ExclusiveGateway', '分支节点'), // 开始拖拽时调用的事件
          click: createBusinessObject('ExclusiveGateway', '分支节点') // 点击时调用的事件
        }
      },
      'create.custom-start-parallel-gateway': {
        group: 'model', // 分组名
        className: 'bpmn-icon-gateway-parallel', // 样式类名
        title: '创建并行开始节点',
        action: { // 操作
          dragstart: createBusinessObject('ParallelGateway', '并行开始节点'), // 开始拖拽时调用的事件
          click: createBusinessObject('ParallelGateway', '并行开始节点') // 点击时调用的事件
        }
      },
      'create.custom-end-parallel-gateway': {
        group: 'model', // 分组名
        className: 'bpmn-icon-gateway-complex', // 样式类名
        title: '创建并行结束节点',
        action: { // 操作
          dragstart: createBusinessObject('ComplexGateway', '并行结束节点'), // 开始拖拽时调用的事件
          click: createBusinessObject('ComplexGateway', '并行结束节点') // 点击时调用的事件
        }
      }
    }
  }
}

CustomPalette.$inject = [
  'bpmnFactory',
  'create',
  'elementFactory',
  'palette',
  'translate',
  'lassoTool',
  'handTool',
  'globalConnect'
]